property based state machine testing